/* 抽象类
类本身就是一种抽象，而抽象类，把类还要抽象，也就是说，抽象类只保留特征，而不定义具体呈现形态
比如方法可以定义好，但不定义具体实现代码，而是由派生的子类来实现方法。
使用abstract关键词指定抽象的意思
可以从抽象类继承出一个普通类，也可以从一个普通类继承出一个抽象类，抽象类也可以定义普通方法，没有限制，很灵活。
因此抽象类一般只作继承使用，抽象类是的继承关系更加明确。
 */
package com.test.Encapsulation_Inheritance_Polymorphism;

public abstract class AbstractStudent {  //比如学生类就可以定义为abstract抽象，由不同的特长生去继承
    public static void main(String[] args) {

    }

    public abstract void study();  //定义一个抽象的学生方法，由不同的特长生去实现自己的study方法。
    // 抽象方法不能有自己的body方法体，所以不写{},写了{}会报错。但是必须由子类实现这个方法，除非子类也是抽象类
    // 抽象方法只能由子类编写，父类没有定义，更加明确了多态的定义：同一个方法多种实现。

    //抽象类不是具体的类定义，因为无法直接使用new关键词来创建对象。只能创建带实现的匿名内部类。
    AbstractStudent abstractStudent = new AbstractStudent() {
        @Override
        public void study() {

        }
    };
}
